/*!
 * \file thrift_comm.h
 *
 * \brief thrift 协议解析共通部分
 *
 * All Rights Reserved Copyright (C) 2014 broada,Co.,Ltd.\n
 * 共通使用的宏和结构体
 *
 * \version 1.0
 * \author geyh
 * \date 2017/02/15
 *
 */
#ifndef APM_R4_THRIFT_COMM_H
#define APM_R4_THRIFT_COMM_H

#include <module_comm.h>
#include <frbyte_buffer.h>
#include "frreport_comm.h"

typedef struct __st_thrift_data
{
    int i_seq_id;
    L4_transaction st_l4_trans;                 //L4信息统计
    Frlist_header *p_report_comm;               //用于临时存储report的公共部分数据
    Frlist_header *p_report_req;                //用于临时存储report的请求部分数据
}thrift_data;

typedef struct __st_L7session_thrift_private
{
    uint8_t u8_proto_id;                        //标志位
    Frbyte_Packet *p_st_data;                   //存bytebuff数据
    L4_transaction st_l4_trans;                 //L4信息统计
    Frlist_header st_thrift_data_list;          //链表头存thrift_data
    unsigned int ui_data_len;                   //tcompact 包的长度

    int i_req_id;                               //tbinary req流水号
    int i_resp_id;                              //tbinary resp流水号
    int i_flag_oneway;                          //tbinary oneway标志位
}L7session_thrift_private;

/*!
 * \brief   thrift_data 链表销毁
 *
 * \arg     node    thrift_data 链表节点
 *
 * \return  void
 *
 */
void frthritf_list_node_free(Frlist_node *node);

/*!
 * \brief   thrift tcopact 协议 request解析
 *
 * \arg     p_st_packet         数据包
 *          p_st_private        私有数据
 *          p_st_conn           CT
 *          p_st_hash_report    上报数据链表
 *
 * \return  APM_L7_ANALYZE_FAIL 失败
 *          APM_L7_ANALYZE_SUCC 成功
 *          APM_L7_ANALYZE_TODO 数据包不完整
 *
 */
int thrift_compact_req_analyze(Apm_packet *p_st_packet, L7session_thrift_private *p_st_private
        , Conntrack *p_st_conn, Frhash_header *p_st_hash_report);

/*!
 * \brief   thrift tcopact 协议 response解析
 *
 * \arg     p_st_packet         数据包
 *          p_st_private        私有数据
 *          p_st_conn           CT
 *          p_st_hash_report    上报数据链表
 *
 * \return  APM_L7_ANALYZE_FAIL 失败
 *          APM_L7_ANALYZE_SUCC 成功
 *          APM_L7_ANALYZE_TODO 数据包不完整
 *
 */
int thrift_compact_resp_analyze(Apm_packet *p_st_packet, L7session_thrift_private *p_st_private
        , Conntrack *p_st_conn, Frhash_header *p_st_hash_report);

#endif //APM_R4_THRIFT_COMM_H
